package com.sichen.product.controller;

import com.sichen.common.utils.PageUtils;
import com.sichen.common.utils.R;
import com.sichen.common.valid.AddGroup;
import com.sichen.common.valid.UpdateGroup;
import com.sichen.common.valid.UpdateStatusGroup;
import com.sichen.product.entity.BrandEntity;
import com.sichen.product.service.BrandService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;


/**
 * 品牌
 *
 * @author sichen
 * @email 15837757959@163.com
 * @date 2022-05-14 14:44:50
 */
@RestController
@RequestMapping("product/brand")
@Api(tags = "商品信息的CRUD")
public class BrandController {
    @Resource
    private BrandService brandService;

    /**
     * 查询所有的品牌列表
     * @param params 前端传递的分页数据
     * @return 所有的品牌列表
     */
    @GetMapping("/list")
    @ApiOperation(value = "查询所有的商品数据")
    //@RequiresPermissions("produck:brand:list")
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = brandService.queryPage(params);
        return R.ok().put("page", page);
    }

    @GetMapping("/infos")
    public R info(@RequestParam("brandIds") List<Long> brandIds){
        List<BrandEntity> brand = brandService.getBrandsByIds(brandIds);
        return R.ok().put("brand",brand);
    }

    /**
     * 根据品牌id查询品牌的详细数据
     * @param brandId 品牌id
     * @return 品牌的数据
     */
    @GetMapping("/info/{brandId}")
    @ApiOperation(value="根据商品Id查询商品数据")
    //@RequiresPermissions("produck:brand:info")
    public R info(@PathVariable("brandId") Long brandId){
		BrandEntity brand = brandService.getById(brandId);
        return R.ok().put("brand", brand);
    }

    /**
     * 新增品牌数据
     * @param brand 品牌数据
     * @return 新增是否成功
     */
    @PostMapping("/save")
    @ApiOperation(value="保存商品信息")
    //@RequiresPermissions("produck:brand:save")
    public R save(@Validated(value = {AddGroup.class}) @RequestBody BrandEntity brand){
		brandService.save(brand);
        return R.ok();
    }

    /**
     * 修改品牌属性 , 并进行级联修改
     * @param brand 要修改的品牌属性
     * @return 修改属性是否成功
     */
    @PostMapping("/update")
    @ApiOperation(value="修改商品信息",notes = "妥协了,正常是修改要使用put请求,但是前端页面请求写死了,不会改,所以这里使用Post请求")
    //@RequiresPermissions("produck:brand:update")
    public R update(@Validated(UpdateGroup.class) @RequestBody BrandEntity brand){
		brandService.updateDeatil(brand);
        return R.ok();
    }

    /**
     * 修改品牌的展示状态
     * @param brand 品牌的属性
     * @return 修改是否成功
     */
    @PostMapping("/update/status")
    @ApiOperation(value="修改商品信息",notes = "妥协了,正常是修改要使用put请求,但是前端页面请求写死了,不会改,所以这里使用Post请求")
    //@RequiresPermissions("produck:brand:update")
    public R updateStatus(@Validated(UpdateStatusGroup.class) @RequestBody BrandEntity brand){
        brandService.updateById(brand);
        return R.ok();
    }

    /**
     * 批量删除品牌
     * @param brandIds 品牌的id数组
     * @return 删除是否成功
     */
    @DeleteMapping("/delete")
    @ApiOperation(value = "删除商品信息|可以批量删除",notes = "传递要删除商品的id数组")
    //@RequiresPermissions("produck:brand:delete")
    public R delete(@RequestBody Long[] brandIds){
		brandService.removeByIds(Arrays.asList(brandIds));
        return R.ok();
    }

}
